// 下载 => 构建 => cv => 注释 => app导入执行
import http from 'wechat-http'

// 接口基础地址
http.baseURL = 'https://live-api.itheima.net/'

// 请求拦截器
http.intercept.request = (options) => {
  // 合并头信息
  options.header = {
    // 权限认证
    Authorization: getApp().token,
    // 默认头信息
    ...options.header,
  }
  // 拦截器处理后的请求参数
  return options
}

// 响应拦截器
http.intercept.response = async (result) => {
  // console.log(result.statusCode) // http 响应状态码
  // console.log(result.config) // 发起请求时的参数
  // console.log(result)
  if (result.statusCode === 401) {
    // token失效 => 跳转登录(让用户重新输入手机号验证码 重新得到一个新的token)
    // token失效 => 得到一个新的token(不需要用户参与) => refreshToken(刷新token)
    // return wx.redirectTo({
    //   url: '/pages/login/index',
    // })

    // 如果你是刷新token请求导致的401 说明你的refreshToken已经有问题了额 => 直接重登陆
    if (result.config.url.includes('/refreshToken')) {
      const pageStack = getCurrentPages() // 页面栈
      const currentPage = pageStack[pageStack.length - 1]
      const currentPagePath = currentPage.route

      // 这次在刷新token  且 401 => 直接登录吧
      return wx.redirectTo({
        url: '/pages/login/index?redirectURL=/' + currentPagePath,
      })
    }

    if (!getApp().refreshToken) return

    const res = await wx.http({
      method: 'post',
      url: '/refreshToken',
      // 有用的refreshToken 覆盖 过期的token
      header: {
        Authorization: getApp().refreshToken,
      },
    })
    // console.log(res, 999)
    getApp().setToken(res.data.token)
    getApp().setRefreshToken(res.data.refreshToken)

    // 无感请求 => 把之前错误的那次请求 重新用新的token发送一次 =>
    // console.log(result, 888)
    return wx.http({
      ...result.config,
      header: {
        Authorization: getApp().token,
      },
    })
  }
  // 拦截器处理后的响应结果
  return result.data
}

// 作为模块导出
export default http

// 也可挂载到 wx 全局命名空间
wx.http = http
